#!/usr/bin/env python3
"""
用户界面模块
提供交互式命令行界面
"""

import os
import sys
import time
from typing import Callable, Dict, List, Optional

class UserInterface:
    """用户界面类"""
    
    def __init__(self, title: str = "ESP32 传感器控制系统"):
        """
        初始化用户界面
        
        Args:
            title: 界面标题
        """
        self.title = title
        self.commands = {}
        self.running = False
    
    def register_command(self, cmd: str, func: Callable, help_text: str):
        """
        注册命令
        
        Args:
            cmd: 命令字符串
            func: 命令处理函数
            help_text: 帮助文本
        """
        self.commands[cmd] = {
            "func": func,
            "help": help_text
        }
    
    def show_header(self):
        """显示界面头部"""
        print("\n" + "=" * 50)
        print(f"{self.title}")
        print("=" * 50)
    
    def show_help(self):
        """显示帮助信息"""
        print("\n命令列表:")
        for cmd, info in self.commands.items():
            print(f"  {cmd} - {info['help']}")
        print("  help - 显示此帮助")
        print("  quit - 退出程序")
    
    def clear_screen(self):
        """清屏"""
        os.system('cls' if os.name == 'nt' else 'clear')
    
    def run(self):
        """运行界面"""
        self.running = True
        self.show_header()
        self.show_help()
        
        while self.running:
            try:
                user_input = input("\n> ").strip()
                
                if user_input.lower() == "quit":
                    self.running = False
                    print("正在退出...")
                    break
                elif user_input.lower() == "help":
                    self.show_help()
                elif user_input.lower() == "clear":
                    self.clear_screen()
                    self.show_header()
                elif user_input in self.commands:
                    self.commands[user_input]["func"]()
                else:
                    print(f"未知命令: {user_input}")
                    print("输入 'help' 获取帮助")
                    
            except KeyboardInterrupt:
                print("\n接收到中断信号，正在退出...")
                self.running = False
                break
            except Exception as e:
                print(f"错误: {e}")
    
    def stop(self):
        """停止界面"""
        self.running = False

# 使用示例
if __name__ == "__main__":
    # 创建用户界面
    ui = UserInterface("测试界面")
    
    # 注册命令
    ui.register_command("hello", lambda: print("Hello, World!"), "打印问候")
    ui.register_command("time", lambda: print(f"当前时间: {time.ctime()}"), "显示当前时间")
    
    # 运行界面
    ui.run()